home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1996 #6 / Amiga Plus CD - 1996 - No. 06.iso / pd / programmierung / proasm / routines / readrexx.r < prev    next >
Text File  |  1993-11-07  |  4KB  |  207 lines

  1.  
  2. ;---;  readrexx.r  ;-----------------------------------------------------------
  3. *
  4. *    ****    ROUTINES FOR A PASSIVE AREXX PORT    ****
  5. *
  6. *    Author        Stefan Walter
  7. *    Version        1.00
  8. *    Last Revision    31.03.93
  9. *    Identifier    rrx_defined
  10. *    Prefix        rrx_    (Read ARexx)
  11. *                 ¯     ¯ ¯
  12. *    Functions    InitEasyARexx, ResetEasyARexx, GetARexxMsg,
  13. *            ReplyARexxMsg
  14. *
  15. ;------------------------------------------------------------------------------
  16.  
  17. ;------------------
  18.     ifnd    rrx_defined
  19. rrx_defined    =1
  20.  
  21. ;------------------
  22. rrx_oldbase    equ    __base
  23.     base    rrx_base
  24. rrx_base:
  25.  
  26. ;------------------------------------------------------------------------------
  27. *
  28. * InitEasyARexx        Initialize everything.
  29. *
  30. * INPUT        a0    Port structure, not initialized yet.
  31. *
  32. * RESULT:    d0    0: Failed, -1: Okay
  33. *        ccr    On d0.
  34. *
  35. ;------------------------------------------------------------------------------
  36.  
  37. ;------------------
  38. InitEasyARexx:
  39.  
  40. ;------------------
  41. ; Open lib and init port.
  42. ;
  43. \open:    movem.l    d1-a6,-(sp)
  44.     lea    rrx_base(pc),a4
  45.     move.l    a0,a3
  46.  
  47.     move.l    4.w,a6
  48.     move.l    10(a0),a1
  49.     Forbid_
  50.     jsr    -390(a6)        ;FindPort()
  51.     Permit_
  52.     tst.l    d0            ;does port exist?
  53.     bne.s    rrx_f1
  54.  
  55.     move.l    a3,a0
  56.     bsr    MakePort        ;make public port
  57.     beq.s    rrx_f1
  58.     move.l    d0,rrx_rexxport(a4)
  59.  
  60.     lea    rrx_rexxname(pc),a1
  61.     jsr    -408(a6)        ;OpenLibrary
  62.     move.l    d0,rrx_rexxbase(a4)
  63.     beq.s    rrx_f2
  64.  
  65.     moveq    #-1,d0
  66.     movem.l    (sp)+,d1-a6
  67.     rts
  68.  
  69. ;------------------
  70.  
  71. ;------------------------------------------------------------------------------
  72. *
  73. * ResetEasyARexx    Reset everything.
  74. *
  75. * RESULT:    d0    0
  76. *
  77. ;------------------------------------------------------------------------------
  78.  
  79. ;------------------
  80. ResetEasyARexx:
  81.  
  82. ;------------------
  83. ; Close.
  84. ;
  85. \close:    movem.l    d1-a6,-(sp)
  86.     move.l    rrx_rexxbase(pc),a1
  87.     move.l    4.w,a6
  88.     jsr    -414(a6)        ;CloseLibrary()
  89.  
  90. rrx_f2:    move.l    rrx_rexxport(pc),a0
  91.     bsr    UnMakePort
  92.  
  93. rrx_f1:    moveq    #0,d0
  94.     movem.l    (sp)+,d1-a6
  95.     rts
  96.     
  97. ;------------------
  98.  
  99. ;------------------------------------------------------------------------------
  100. *
  101. * GetARexxMsg    Get an ARexx msg from port. Returns 0 if there is none or
  102. *        if it wasn't an ARexx msg. NonARess msgs are dumped.
  103. *
  104. * RESULT:    d0    MSG or 0.
  105. *        ccr    On d0.
  106. *
  107. ;------------------------------------------------------------------------------
  108.  
  109. ;------------------
  110. GetARexxMsg:
  111.  
  112. ;------------------
  113. ; Get.
  114. ;
  115. \get:    movem.l    d1-a6,-(sp)
  116.     move.l    rrx_rexxport(pc),a0
  117.     move.l    4.w,a6
  118.     jsr    -372(a6)        ;GetMsg()
  119.     move.l    d0,d7
  120.     beq.s    \exit
  121.  
  122.     move.l    d0,a0
  123.     move.l    rrx_rexxbase(pc),a6
  124.     jsr    -168(a6)        ;IsRexxMsg()
  125.     tst.l    d0
  126.     beq.s    \exit
  127.  
  128.     move.l    d7,d0
  129.  
  130. \exit:    movem.l    (sp)+,d1-a6
  131.     rts
  132.  
  133. ;------------------
  134.  
  135. ;------------------------------------------------------------------------------
  136. *
  137. * ReplyARexxMsg    Reply a previously received ARex message.
  138. *
  139. * INPUT:    a0    Message.
  140. *        d0    Result 1    
  141. *        d1    Result 2 (a text)
  142. *
  143. ;------------------------------------------------------------------------------
  144.  
  145. ;------------------
  146. ReplyARexxMsg:
  147.  
  148. ;------------------
  149. ; Reply.
  150. ;
  151. \get:    movem.l    d0-a6,-(sp)
  152.     move.l    rrx_rexxbase(pc),a6
  153.     move.l    d0,d4
  154.     move.l    d1,d5
  155.     move.l    a0,d7
  156.     move.l    28(a0),d2
  157.     btst    #17,d2            ;result wanted?
  158.     bne.s    \gen
  159.     moveq    #0,d4
  160.     moveq    #0,d5
  161.     bra.s    \send
  162.  
  163. \gen:    tst.l    d5            ;2. result there?
  164.     beq.s    \send
  165.     move.l    d5,a0
  166.     moveq    #0,d0
  167. \loop:    tst.b    (a0)+
  168.     beq.s    2$
  169.     addq.l    #1,d0
  170.     bra.s    \loop
  171. 2$:    move.l    d5,a0
  172.     jsr    -126(a6)        ;CreateArgString()
  173.     move.l    d0,d5
  174.  
  175. \send:    move.l    d7,a1
  176.     move.l    d4,32(a1)
  177.     move.l    d5,36(a1)
  178.     move.l    4.w,a6
  179.     jsr    -378(a6)        ;ReplyMsg()
  180.  
  181. \exit:    movem.l    (sp)+,d0-a6
  182.     rts
  183.  
  184. ;------------------
  185.  
  186. ;------------------------------------------------------------------------------
  187.  
  188. ;------------------
  189. ; Data.
  190. ;
  191. rrx_rexxbase:    dc.l    0
  192. rrx_rexxport:    dc.l    0
  193. rrx_rexxname:    dc.b    "rexxsyslib.library",0
  194.     even
  195.  
  196. ;------------------
  197.  
  198. ;------------------------------------------------------------------------------
  199.  
  200. ;------------------
  201.     base    rrx_oldbase
  202.  
  203. ;------------------
  204.     endif
  205.     end
  206.  
  207.